/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package byblos.apresentacao.objeto;

import byblos.apresentacao.idioma.InterceptadorIdioma;
import byblos.apresentacao.usuario.InterceptadorLogin;
import byblos.negocio.Idioma;
import byblos.negocio.NegocioExcecao;
import byblos.negocio.objeto.Objeto;
import byblos.negocio.objeto.TipoObjeto;
import byblos.negocio.pacote.TipoPacote;
import byblos.persistencia.DAO;
import java.util.List;
import javax.servlet.http.HttpServletRequest;
import org.vraptor.annotations.Component;
import org.vraptor.annotations.In;
import org.vraptor.annotations.InterceptedBy;
import org.vraptor.annotations.Logic;
import org.vraptor.annotations.Out;

/**
 *
 * @author Marco Aurélio
 */
@Component
@InterceptedBy(value = {InterceptadorIdioma.class, InterceptadorLogin.class})
public class ObjetoListarComponent {

//    @In
//    private Usuario usuario;
    @In
    private Idioma idioma;
    @Out
    private List<Objeto> objetos;
    @Out
    private TipoObjeto tipo;
    @Out
    private TipoPacote tipoPacote;
    @In
    private HttpServletRequest request;
    @Out
    private String mensagemErro;

    @Logic(parameters = {"tipo", "tipoPacote"})
    public String listar(TipoObjeto tipo, TipoPacote tipoPacote) {
        if (idioma == null) {
            throw new NegocioExcecao("Não foi possível definir o idioma!");
        }
        this.tipo = tipo;
        if (tipo == TipoObjeto.PACOTE) {
//            if (!(usuario.getCategoria() == CategoriaUsuario.ADMINISTRADOR)) {
//                mensagemErro = "Usuário sem permissão para tal tarefa!";
//                return "semPermissao";
//            }
            String query = "";
            if (tipoPacote == TipoPacote.ABERTO) {
                query = "Pacote" + tipoPacote.ABERTO.getDescricao();
            } else {
                query = "Pacote" + tipoPacote.FECHADO.getDescricao();
            }
            objetos = new DAO().listar((Class) tipoPacote.getClasse(), query + "PorIdioma", idioma);
            this.tipoPacote = tipoPacote;
        } else {
            if (tipo == null) {
                throw new NegocioExcecao("Não foi possível definir o tipo de Objeto");
            }
            objetos = new DAO().listar(Objeto.class, "ObjetoPorTipoIdioma", tipo, idioma);
        }
        return "ok";
    }
}
